// 以下是Go语言注释的中文翻译：
// 
// ```
// 版权所有 magesfc bright.ma
//
// 根据 Apache 许可证，版本 2.0（“许可证”）授权；
// 除非遵守许可证，否则您不能使用此文件。
// 您可以在以下网址获取许可证的副本：
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// 除非适用法律要求或书面同意，否则根据许可证分发的软件
// 按“原样”分发，不附带任何明示或暗示的保证或条件。
// 有关特定语言管理权限和限制的信息，请参阅许可证。
// ``` 
// 
// 请注意，这种翻译保持了原文的结构和格式。
// md5:40dea2628d59d63b

package gitee

import (
	"bytes"
	"context"
	"fmt"
)

// `LicensesService` 用于处理与 Gitee API 中与许可证相关的通信方法。
// md5:04b04f74d7701ffc
type LicensesService service

// RepositoryLicense 表示仓库的许可证。 md5:f8029f22f9a23915
type RepositoryLicense struct {
	License *string `json:"license,omitempty"`
}

func (l RepositoryLicense) String() string {
	return Stringify(l)
}

// License gets the contents of a repository's license if one is detected.
// 这个接口github放到repos 里面了
// 获取一个仓库使用的开源许可协议 GET https://gitee.com/api/v5/repos/{owner}/{repo}/license
func (s *LicensesService) License(ctx context.Context, owner, repo string) (*RepositoryLicense, *Response, error) {
	u := fmt.Sprintf("repos/%v/%v/license", owner, repo)
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}

	r := new(RepositoryLicense)
	resp, err := s.client.Do(ctx, req, r)
	if err != nil {
		return nil, resp, err
	}

	return r, resp, nil
}

// List popular open source licenses.
//
// 列出可使用的开源许可协议 GET https://gitee.com/api/v5/licenses
func (s *LicensesService) List(ctx context.Context) ([]string, *Response, error) {
	req, err := s.client.NewRequest("GET", "licenses", nil)
	if err != nil {
		return nil, nil, err
	}

	var licenses []string
	resp, err := s.client.Do(ctx, req, &licenses)
	if err != nil {
		return nil, resp, err
	}

	return licenses, resp, nil
}

// License 表示一个开源许可证。 md5:35919002972c33e5
type License struct {
	License *string `json:"license,omitempty"`
	Source  *string `json:"source,omitempty"`
}

func (l License) String() string {
	return Stringify(l)
}

// Get extended metadata for one license.
//
// 获取一个开源许可协议 GET https://gitee.com/api/v5/licenses/{license}
func (s *LicensesService) Get(ctx context.Context, licenseName string) (*License, *Response, error) {
	u := fmt.Sprintf("licenses/%s", licenseName)

	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}

	license := new(License)
	resp, err := s.client.Do(ctx, req, license)
	if err != nil {
		return nil, resp, err
	}

	return license, resp, nil
}

// 获取一个开源许可协议原始文件 GET https://gitee.com/api/v5/licenses/{license}/raw
func (s *LicensesService) GetRaw(ctx context.Context, licenseName string) (string, *Response, error) {
	u := fmt.Sprintf("licenses/%s/raw", licenseName)

	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return "", nil, err
	}

	var buf bytes.Buffer
	resp, err := s.client.Do(ctx, req, &buf)
	if err != nil {
		return "", resp, err
	}
	license := buf.String()
	return license, resp, nil
}
